//todo 计算文件的hash值使用work多线程

self.importScripts('./spark-md5.min.js');//worker引入文件的写法

self.onmessage=e=>{//接受前台传递过来的数据
    console.log(e);
    const {chunks} = e.data;//解构前台传递的chunks（这个是我们切片好的文件）
    const spak = new self.SparkMD5.ArrayBuffer();//spark-md5实例化
    let progress =0;
    let count = 0;
    //每次进行一段一段的计算，使用递归
    const loadNext = index=>{
        const reader = new FileReader()
        reader.readAsArrayBuffer(chunks[index].file);
        reader.onload = e=>{
            count++;//使用这个变量计算文件是否计算完
            spak.append(e.target.result);//往md5中追加文件计算
            if(count==chunks.length){//如果是最后一个文件，直接计算返回
                self.postMessage({
                    progress:100,
                    hash:spak.end()
                })
            }else{//如果不是最后一个文件，再次调用计算，并返回前台进度条的值
                progress = 100/chunks.length;
                self.postMessage({
                    progress
                })
                loadNext(count);//再次递归调用
            }
        }

    }
    loadNext(0);
}